package com.rjj.findvalue;

import java.util.*;

/**
 * @author renjianjun
 * @date 2020/9/29 07:51
 * @email 215060580@qq.com
 * 一组数组中找出和是特定的值13
 */
public class FindValue {

    static int[] val = {12, 3, 4, 6, 11, 8, 1, 5};
    static int target = 13;
    static Map<Integer, Integer> result = new HashMap<>();

    public static void main(String[] args) {
        //find();
        find2();
    }

    /**
     * 放一个数据比较一次，直到有两个相等的数据为止。三个相等的就不行了
     */
    public static void find2() {
        Map<Integer, Integer> map = new HashMap<>();
        List<List<Integer>> re = new ArrayList<>();
        for (int i = 0; i < val.length; i++) {
            //放入数据
            map.put(val[i], i);

            int other = target - val[i];
            System.out.println("===" + other + "'" + val[i] + "===" + map.size());
            //比较数据，下次不会出现重复，以为我数据下标已经过了这个相等的两个数据
            if (map.containsKey(other)) {
                re.add(Arrays.asList(map.get(other), i));
            }
           // map.put(val[i], i);
        }

        re.forEach(System.out::println);
    }

    public static void find() {
        //val值，下标
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < val.length; i++) {
            map.put(val[i], i);
        }
        /*
         数组循环比较，每次都是移除获取到的值后的全部数据，这个有多余的数据
         */
        for (int i = 0; i < val.length; i++) {
            int other = target - val[i];
            if (map.containsKey(other) && map.get(other) != i) {
                //map中有和他加起来和为13的，并且不能够是自己
                //这里获取下标
                result.put(i, map.get(other));
                //移除这个获取的值，否则就会出现重复
                map.remove(val[i]);
            }
        }

        result.forEach((integer, integer2) -> {
            System.out.println("{" + integer + "," + integer2 + "} =====》" + "[" + val[integer] + "," + val[integer2] + "]");
        });
    }
}
